Numere Farey (Timisoara, pregatire. oct. 1995)
 O secventa Farey de ordinul n este un sir de perechi
	 (x1,y1), (x2,y2), (x3,y3), ...
 unde xi,yi sunt numere naturale si

      (i)   0 < xi, yi <= n, pentru i>=1

	     xi     xi+1
      (ii)  ---- < ------  , pentru i>=1
	     yi     yi+1

		xi
      (iii) 0<=----<=1     , pentru i>=1
		yi

      Obs.-xi   reprezinta x indice i
	  -xi+1 reprezinta x indice i+1

  Se citesc din fisierul de intrare 'in2.txt' mai multe numere scrise cate
unul pe linie, reprezentand fiecare o valoare n. Sa se determine pentru
fiecare valoare citita o secventa Farey.
  Rezultatele vor fi depuse in fisierul de iesire 'ou2.txt', cel mult 72
de caractere pe linie.

Exemplu:
  Pentru setul de date de intrare:
  7

  Fisierul de iesire va contine:
(0,1),(1,7),(1,6),(1,5),(1,4),(2,7),(1,3),(2,5),(3,7),(1,2),(4,7),(3,5),
(2,3),(5,7),(3,4),(5,6),(6,7),(1,1).
--------------------------------------------------------
Rezolvare: (Mihai Stroe)

   Am considerat ca se cere secventa maximala; enuntul nu este prea clar.
   La fiecare pas i se genereaza sirul 1/i,2/i,3/i...i/i , care
   se interclaseaza apoi cu sirul generat inainte.

   Exemplu:
   initial : 0/1
   pas 1 : 1/1
           0/1,1/1
   pas 2 : 1/2,2/2
           0/1,1/2,1/1
   pas 3 : 1/3,2/3,3/3
           0/1,1/3,1/2,2/3,1/1

}

type rec=record x,y:byte;rez:real;end;
var a:array[0..6400]of rec;
    b:array[1..100]of rec;
    i,j,k,l,m,n:integer;
    fi,fo:text;

begin
  assign(fi,'in2.txt');
  assign(fo,'ou2.txt');
  reset(fi);
  rewrite(fo);
  while not eof(fi)do
    begin
      readln(fi,n);
      k:=1;
      a[0].x:=0;
      a[0].y:=1;
      a[0].rez:=0;
      a[1].x:=1;
      a[1].y:=1;
      a[1].rez:=1;
      for i:=1 to n do
          begin
            for j:=1 to i do
                begin
                  b[j].x:=j;
                  b[j].y:=i;
                  b[j].rez:=j/i;
                end;
            j:=1;
            l:=1;
            while(j<i)or(l<k)do
              begin
                if a[l].rez>b[j].rez then
                   begin
                     for m:=k downto l do
                         a[m+1]:=a[m];
                     inc(k);
                     a[l]:=b[j];
                     inc(j);
                   end
                   else if a[l].rez=b[j].rez then begin inc(j);inc(l);end
                   else inc(l);
              end;
          end;
      m:=0;
      for i:=0 to k do
          begin
            write(fo,'(',a[i].x,',',a[i].y,') ');
            inc(m,8);
            if m>72 then begin writeln(fo);m:=0;end;
      end;
      writeln(fo);
    end;
  close(fi);
  close(fo);
end.
